package com.icode.lock8;

import java.util.concurrent.TimeUnit;

/**
 * @Author: my_code
 * @Email: my_code@foxmail.com
 * @Create: 2020-12-10 18:37
 *
 * Q：5-6
 * 先打印“方法A”
 *     增加两个静态同步代码块，只有一个对象，先打印“方法A”
 *     增加两个静态同步代码块，两个对象，先打印“方法A”
 *     以为方法的锁是Phone4.class，全局只有一份
 */
public class Test4 {
    public static void main(String[] args) {
        Phone4 phone1 = new Phone4();
        Phone4 phone2 = new Phone4();

        new Thread(()->{phone1.methodA();}).start();

        //延时2秒 让线程先拿到锁
        try {
            TimeUnit.SECONDS.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}

        new Thread(()->{phone1.methodB();}).start();
    }
}

class Phone4{

    //synchronized 锁的是对象方法的调用者
    //static 静态方法
    //类一加载就有了！锁的是 Class 模板
    public static synchronized void methodA(){
        try {TimeUnit.SECONDS.sleep(4);} catch (InterruptedException e) {e.printStackTrace();}
        System.out.println("方法A");
    }
    public static synchronized void methodB(){
        System.out.println("方法B");
    }
}
